<?php
/**
 * PrynLib
 * @copyright 2007-2009 Prynel
 * @author Olivier ROGER <roger.olivier@gmail.com>
 * @category libPrynel
 * @package Feed
 * @version $Revision: 80 $
 */

/**
 * Classe RssBuilder
 *
 * Construction de fichier Rss ou diffusion de flux rss
 * Exemple d'utilisation : 
 * <code>
 * $objet = new RssBuilder('Titre Rss', 'http://dd','Descrition','fr-FR','Copyright 2008-2009 WidMedia');
 * $objet->addItem('LE Titre','Petite description','http://blabla.com');
 * $objet->addItem('LE Titre','Petite description','http://blabla.com',array('pubDate'=>'date format RFC2822', 'comments'=>'http://pagedecom.org'));
 * $objet->buildRss(); // Affichage direct
 * $objet->buildRss(news.xml); // Ecriture d un fichier
 * $objet->buildRss(); // Envoi du flux direct
 * </code>
 *
 * @category libPrynel
 * @package Feed
 * @version 1.0.1 
 * @author Olivier ROGER <roger.olivier@gmail.com>
 * @copyright  2007-2009 Prynel
 *       
 * 
 * 
 */
 class Feed_RssBuilder extends File_FileManager
 {
 	/**
 	 * Flux xml
 	 * @var string
 	 */
 	private $xml;
 	
 	/**
 	 * Titre du channel
 	 * @var string
 	 */
	private $cTitle;
	
	/**
 	 * Description du Channel
 	 * @var string
 	 */
	private $cDesc;
	
	/**
 	 * Lien vers une page correspondante
 	 * @var string
 	 */
	private $cLink;
	
	/**
 	 * Langue du Rss
 	 * @var string
 	 */
	private $cLang;
	
	/**
 	 * Derniere mise à jour du rss
 	 * @var string
 	 */
	private $cLBuild;
	
	/**
 	 * Copyright
 	 * @var string
 	 */
	private $cCopyright;
	
	private $domDoc;
	
	/**
	 * Constructeur
	 * @param string $title Titre
	 * @param string $link Lien
	 * @param string $desc Description
	 * @param string $lang Langue
	 * @param dateGMT $lastbuild Dernière mise à jour
	 * @param string $copyright Copyright
	 */
	public function __construct($title,$link,$desc,$lang,$copyright)
	{
		$this->xml        = '';
		$this->cTitle     = $title;
		$this->cLink      = $link;
		$this->cDesc      = $desc;
		$this->cLang      = $lang;
		$this->cLBuild    = date("r");
		$this->cCopyright = $copyright;
			
		$this->xml.="<?xml version=\"1.0\" ?>\n";
		$this->xml.="<rss version=\"2.0\" >\n";
		$this->xml.="\t<channel>\n";
		$this->xml.="\t\t<title>".$this->cTitle."</title>\n";
		$this->xml.="\t\t<link>".$this->cLink."</link>\n";
		$this->xml.="\t\t<description>".$this->cDesc."</description>\n";
		$this->xml.="\t\t<language>".$this->cLang."</language>\n";
		$this->xml.="\t\t<lastBuildDate>".$this->cLBuild."</lastBuildDate>\n";
		$this->xml.="\t\t<copyright>".$this->cCopyright."</copyright>\n";
	}
	
	/**
	 * Ajout d'un nouvel item au channel.
	 * 
	 * @access public
	 * @param string $title Titre de l item
	 * @param string $desc Description de l'item
	 * @param string $link Lien vers le site pour cet item
	 * @param array $optParam Tableau des paramètres optionnels
	 */
	public function addItem($title,$desc,$link,$optParam = array())
	{
		$this->xml.="\t\t<item>\n";
		$this->xml.="\t\t\t<title>".$title."</title>\n";
		$this->xml.="\t\t\t<link>".$link."</link>\n";
		$this->xml.="\t\t\t<description>".$desc."</description>\n";
		$optParamListe = array('pubDate','comments','author','guid');
		foreach($optParamListe as $key)
		{
			if(isset($optParam[$key]))// Si un paramètre additionnel est fourni
			{
				$this->xml.="\t\t\t<".$key.">".$optParam[$key]."</".$key.">\n";
			}
		}
		$this->xml.="\t\t</item>\n";
	}
	/**
	 * Finalise le flux Rss en fermant les balises ouvertes.
	 * @access private
	 */
	private function finaliseRss()
	{
		$this->xml.="\t</channel>\n";
		$this->xml.="</rss>";
	}
	
	/**
	 * Construit le flux rss dans un fichier ou sur l ecran
	 * @param string $file Chemin vers le fichier xml (optionnel)
	 * @return string Flux xml
	 */
	public function buildRss($file='')
	{
		rssBuilder::finaliseRss();
		if($file!='')
		{
			$this->pathToFile = $file;
			$this->open(WRITE);
			$this->write($this->xml);
			$this->close();
		}
		else
		{
			$this->xml = str_replace("\t","",$this->xml);
			$this->xml = str_replace("\n","",$this->xml);
			return $this->xml;
		}
	}
	/**
	 * Destructeur
	 */
	public function __destruct()
	{
	}
 }
 ?>
